package com.cskaoyan.javase.oop1._15import.one;
// import com.cskaoyan.javase.oop1._15import.two.Student;

// import com.cskaoyan.javase.oop1._15import.two.Student;
// import com.cskaoyan.javase.oop1._15import.two.Teacher;
//
// import java.util.Scanner;

/**
 * 在Java代码当中,在一个类中,如何去使用另外一个类?
 *
 * 1.如果在代码中直接用简单类名,在不做任何额外操作的情况下:
 *      编译器只能够从同包下去找该类:
 *          1.找到了,编译通过
 *          2.没找到,编译不通过,报错
 *       这其实可以看成是一个就近原则,因为同包下绝不可能出现同名类
 *       所以同包下,用简单类名是可行的
 *
 * 2.如果在代码中直接用简单类名,而且还想要访问不同包下的类时:
 *      那就必须告诉编译器,该不同包下的类,究竟属于哪个包
 *      这个过程就是导包(import)
 *      之所以要导包,是因为不同包下,同名类是很多的
 *      如果不告诉包路径,是无法确定一个类的.
 *      导包的语法:
 *      import 全限定类名;
 *      导包语句的位置: 在package关键字的下面,其它有效代码的上面.
 *          注释不算有效代码
 *          但是一般建议import关键字紧跟package声明
 *          而且如果利用了Java的自动导包,程序员其实无需关心导包.
 *
 *      所以如果想要用简单类名,去使用不同包下的其它类
 *      就需要import导包语句
 *
 *
 * 3.全限定类名也是一个类名(虽然它比较长),所以直接在代码中写全限定类名
 *      去使用一个类,也是可以的.
 *      这时就无须导包了.
 *
 *      但是这种方法一般是不推荐使用的,因为它太长了,不方便
 *      建议使用不同包下的类时,优先使用导包的语法,而不是全限定类名
 *
 *
 * 4.直接在代码中用全限定类名,虽然很少见,但也有独特的用途:
 *      同时在一个类中,使用两个相同类名的类
 *      比如在该类中,同时使用one包下的Student,以及two包下的Student
 *
 *
 * @since 11:03
 * @author wuguidong@cskaoyan.onaliyun.com
 */

public class Demo {
    public static void main(String[] args) {
        /*Student s = new Student();
        s._3test();

        new Scanner(System.in);

        Teacher t = new Teacher();
        t._3test();

        com.cskaoyan.javase.oop1._15import.two.BigStudent bs = new com.cskaoyan.javase.oop1._15import.two.BigStudent();
        bs._3test();*/

        Student s = new Student();
        s.test();

        com.cskaoyan.javase.oop1._15import.two.Student s2 = new com.cskaoyan.javase.oop1._15import.two.Student();
        s2.test();

    }
}